from rest_framework import serializers
from dvadmin.utils.serializers import CustomModelSerializer
from pdms.models import compModel
from django_filters import CharFilter
from django_filters.rest_framework import FilterSet
from dvadmin.utils.viewset import CustomModelViewSet


# ================================================= #
# ************** 客户 序列化器  ************** #
# ================================================= #
class CompModelSerializer(CustomModelSerializer):
    class Meta:
        model = compModel
        fields = '__all__'


class CompModelCreateUpdateSerializer(CustomModelSerializer):
    """
    创建/更新时的列化器
    """

    # 此处可写定制的 创建/更新 内容
    def validate(self, attrs: dict):
        return super().validate(attrs)

    class Meta:
        model = compModel
        fields = '__all__'


class ExportCompModelSerializer(CustomModelSerializer):
    """
    导出 序列化器
    """

    class Meta:
        model = compModel
        fields = ('id', 'name', 'owner', 'url', 'cap', 'val', 'empNum', 'province',
                  'city', 'district', 'street', 'address',
                  'type', 'busType', 'insType', 'scope', 'progress', 'rank', 'collaborator',)


# ================================================= #
# ************** 客户 过滤器  ************** #
# ================================================= #
class CompModelFilter(FilterSet):
    # 客户库 简单序过滤器
    # 通过 lookup_expr 可进行模糊查询，其他配置可自行百度
    name = CharFilter(lookup_expr='icontains')
    owner = CharFilter(lookup_expr='icontains')

    class Meta:
        model = compModel
        exclude = ('description', 'creator', 'modifier')


class CompModelViewSet(CustomModelViewSet):
    """
        客户库 的CRUD视图
    """
    queryset = compModel.objects.all()
    serializer_class = CompModelSerializer  # 序列化器
    create_serializer_class = CompModelCreateUpdateSerializer  # 创建/更新时的列化器
    update_serializer_class = CompModelCreateUpdateSerializer  # 创建/更新时的列化器
    filter_class = CompModelFilter  # 过滤器
    search_fields = ('name',)  # 搜索
    ordering = ['-empNum']  # 默认排序

    # 导出
    export_field_data = ['编号', '公司名称', '公司法人', '网址', '实缴资本【万】', '市值【亿】', '参保人数',
                         '省份', '地市', '区县', '街道/乡镇', '详细地址', '公司类型', '业务类型', '行业分类',
                         '经营范围', '合作进度', '客户优先级', '合作人员', ]  # 导出
    export_serializer_class = ExportCompModelSerializer  # 导出序列化器
    # 导入客户库
    import_field_data = {'name': '公司名称', 'owner': '公司法人', 'cap': '实缴资本【万】', 'url': '网址',
                         'val': '市值【亿】', 'empNum': '参保人数', 'province': '省份',
                         'city': '地市', 'district': '区县', 'street': '街道/乡镇',
                         'address': '详细地址', 'type': '公司类型', 'busType': '业务分类',
                         'insType': '行业分类', 'scope': '经营范围', 'progress': '合作进度',
                         'rank': '客户优先级', 'collaborator': '合作人员',
                         }

    import_serializer_class = ExportCompModelSerializer
